In cloud computing environments, virtual machines are typically launched from “images” which are serialized representations of virtual machine state. Requests to instantiate a new virtual machine specify an image via a tracking identifier. Clouds maintain repositories of images to satisfy these requests. Images are often large files, with sizes ranging from the high 100's of megabytes (MBs) to gigabytes (GBs). Images are stored in formats like Quick Emulator (QEMU) Copy-on-Write (QCOW or QCOW2), RAW, TAR, Amazon Machine Image (AMI), Virtual Hard Disk (VHD) (Microsoft HyperV specific), or VMX (VMWare specific). Different platforms support different formats of images but use the different image formats to perform the same function, which is to launch or instantiate a “compute resource.” An “image” includes information that is used to create or instantiate a virtual machine (VM), a baremetal, a container, an emulator, or a zone.
A VM includes an operating system (OS) or application that is executed in the context of software called a hypervisor. A hypervisor emulates (virtualizes) dedicated hardware. A hypervisor executes on a computer and receives a request to launch a virtual machine. The request includes a pointer (e.g., a path name) to an image that is to be used. The hypervisor retrieves the image, creates a volume from the contents of the image, and then launches a controlled execution environment which executes a bootloader stored on the volume created. The VM executes under the control of the hypervisor, and many virtual machines can be executed on a single physical machine. Each VM typically has its own copy of the operating system and all components required to run the operating system and the applications therein.
A baremetal includes a physical machine that is provisioned using some suitable image. One way in which this can be accomplished is through a bootstrapping mechanism (e.g., BOOTP) where a physical machine boots into a primitive program (e.g., BIOS), which then looks on a network for a BOOTP server. If found, the BOOTP server provides the BIOS program with information that is used to fetch an image (e.g., a location IP and image identifier). The BOOTP server retrieves the image, writes it to a disk, and then transfers control to the bootloader that has been written to the disk.
A container is similar to a VM in that it is not a physical machine. However, unlike a VM, a container typically does not contain a complete operating system. Many containers can run on a physical machine or a virtual machine, and all of them share the operating system image with the physical or virtual machine. Each container has a private copy of the application or components that is being run in the container.
In certain computing scenarios, a logical disk volume is instantiated from a “volume image,” which is a serialized representation of the state of a logical disk volume. Requests to instantiate a new volume specify the volume image. These volume images are sometimes referred to as “snapshots” and are often gigabytes, terabytes, or even petabytes in size. Clouds maintain repositories of snapshots to satisfy these requests. A snapshot of an object includes a representation of the state of the object at a specific point in time, with sufficient information available to be able to, at a subsequent time, create an identical copy of the object at the time of the snapshot. For example, a computer may store data on a number of disk drives which are accessible by an application running on that computer as a “logical volume.” A snapshot of the logical volume is a representation of the state of that logical volume such that a clone of the logical volume can be created at some point in the future. One implementation of a snapshot includes a complete copy of every object on the logical volume and the hierarchical directory structure. In other implementations, a snapshot may include state, configuration, and/or timestamp information that is used to instantiate a logical disk volume.
An “artifact,” as referred to herein, includes any type of image, snapshot, or other serialized representation of state (e.g., operating system state, data files, and/or applications), and/or configuration information, that may be used as a template for creating or instantiating a compute resource (e.g., a VM, a baremetal, a container), a logical disk volume, or other serialized representation of state.